package pub.wkq.common.utils;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

/**
 *
 */
public class GeoUtils {
    /**
     * 输入地址，返回经纬度（使用百度 API）
     *
     * @param address
     * @return map {lng, lat} 经纬度
     */
    public static Map<String, Double> getLngAndLat(String address) throws JSONException {
        Map<String, Double> map = new HashMap<>();
        String url = "http://api.map.baidu.com/geocoding/v3/?address=" + address + "&output=json&ak=nlq8uFkzKnpF2GmlKO4KF2SshDLQioM6";
        //发起 http get 请求
        String json = get(url);
        System.out.println("json = " + json);
        //提取 json 中的经纬度，使用 Jackson
        JSONObject jsonObject = new JSONObject(json);
        JSONObject result = jsonObject.getJSONObject("result");
        JSONObject location = result.getJSONObject("location");
        map.put("lng", location.getDouble("lng"));
        map.put("lat", location.getDouble("lat"));
        return map;
    }

    /**
     * Q: HttpUtils 的 get 方法怎么实现的？
     * A:  1. 使用 HttpClient 发起 http 请求
     * 2. 使用 IOUtils 将响应体转换为字符串
     * 3. 使用 JSONUtils 将字符串转换为 JSON 对象
     * 4. 使用 JSON 对象获取需要的数据
     * 5. 将数据封装到 map 中并返回
     */
    public static String get(String url) {
        //使用 restTemplate 发起 get 请求
        ResponseEntity<String> responseEntity = new RestTemplate().getForEntity(url, String.class);
        //获取响应体
        return responseEntity.getBody();
    }

    public static void main(String[] args) throws JSONException {
        Map<String, Double> map = getLngAndLat("北京市海淀区上地十街10号");
        System.out.println("map = " + map);
    }
}
